由於今天我加班比較晚下班,沒有時間準備我的東西,
所以我就來講解一下昨天的計算機我後來發現的BUG吧!!(趕工出來的東西...看來我還差的遠呢)
不知道認真的各位有沒有發現呢?
其實昨天的計算機沒辦法算小數點、在特定情況時按下 = 時會刪除運算元!?
OK!首先小數點就請幫我建立一個新的按鍵事件
procedure TForm5.btn16Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'.';
end;
然後改一下我們計算的公式
procedure TForm5.CalResult;
var
num1,num2:Double; //請幫我把型態從Int變成Double
begin
if (Pos('+',edt1.text)>0) then
if Pos('+',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='+'
else
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
if (Pos('-',edt1.text)>0) then
if Pos('-',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='-'
else
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
if (Pos('*',edt1.text)>0) then
if Pos('*',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='*'
else
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
if (Pos('/',edt1.text)>0) then
if Pos('/',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='/'
else
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
NumL.DelimitedText:=edt1.Text;
if (NumL.Count<2) then
Exit; //停止涵式
num1:=StrToFloat(NumL[0]); //改成StrToFloat
num2:=StrToFloat(NumL[1]); //改成StrToFloat
if (Pos('+',edt1.text)>0) then
edt1.Text:=FloatToStr(num1+num2); //改成StrToFloat
if (Pos('-',edt1.text)>0) then
edt1.Text:=FloatToStr(num1-num2); //改成StrToFloat
if (Pos('*',edt1.text)>0) then
edt1.Text:=FloatToStr(num1*num2); //改成StrToFloat
if (Pos('/',edt1.text)>0) then
begin
edt1.Text:=FloatToStr(num1/num2);
end;
end;
好現在大家一定有疑惑,為什麼不直接宣告成Float就好了呢!!?
因為
不要問我為什麼,我也很疑惑!!
然後下面型態轉換還使用StrToFloat.....WTF
既然沒有那我們只好使用Double,可是卻沒有StrToDouble...
總之這樣就可以算有小數點的數值了!!
再來就是 = 按鍵事件
procedure TForm5.btn15Click(Sender: TObject);
var
i:Integer; //涵式需求
begin
CalCheck;
if NumC=1 then
begin
if TryStrToInt(Copy(edt1.Text,Length(edt1.Text),1),i) then //判斷最後一位是不是數值
CalResult;
end;
end;
TryStrToInt(字串,存值得變數)
Copy(字串,起始位置,取幾位)
這樣就可以避免在沒有第二數值時刪除運算元囉!!
再來還有一個很重要的事!!
除數不得為0,所以我們必須把她擋起來~
num1:=StrToFloat(NumL[0]); //改成StrToFloat
num2:=StrToFloat(NumL[1]); //改成StrToFloat
if (Pos('+',edt1.text)>0) then
edt1.Text:=FloatToStr(num1+num2); //改成StrToFloat
if (Pos('-',edt1.text)>0) then
edt1.Text:=FloatToStr(num1-num2); //改成StrToFloat
if (Pos('*',edt1.text)>0) then
edt1.Text:=FloatToStr(num1*num2); //改成StrToFloat
if (Pos('/',edt1.text)>0) then
begin
if num2<>0 then //數值2不等於0時
edt1.Text:=FloatToStr(num1/num2)
else
ShowMessage('除數不得為0'); //等於0時顯示訊息
end;
然後你就會發現,挖 ~ / 越按越多(恩..bug就是這樣越來越多哈哈哈哈
所以
//在算成績的位置
if (Pos('/',edt1.text)>0) then
begin
if num2<>0 then
edt1.Text:=FloatToStr(num1/num2)
else
begin
ShowMessage('除數不得為0');
edt1.Text:=FloatToStr(num1);
end;
end;
今天就到這裡,有想到甚麼要補充的東西會再回來補充,
總之我會盡力維持PO文習慣,就算我不能連續30天,
那我們下次見囉!!~睡覺去~